其他
好未来学而思网校如何实现1小时内发布一个新项目
不点蓝字,我们哪来故事?
背景
新域名备案(准备必要的资料) 服务器申请(机房选择、单机硬件配置、系统选型、网段规划、机器命名、容量预估) 服务器生产(必要软件初装、参数校对) 研发授权(准备dev or guest人员名单、准备机器标签进行批量授权) 投入发布系统(创建发布项目、填充机器信息、项目人员分工) 配置网关(集群选择、vhost配置、upstream配置) 域名解析(是否经过全站加速/高防等防护产品、提供解析地址生效) 若是容量预估不足,还需要再经历一遍#2~#6(多批生产的机器存在环境配置不一致的隐患) 如果遇到项目下线,往往域名又被容易忽略掉,造成一些无用且已经备案的域名,不易管理
容器平台
资源申请流程 -〉 资源采购 -〉 机器授权 -〉 服务运行环境配置(环境、网络) -〉 配置发布系统 -〉 配置网关/日志 -〉 性能压测
通过容器的环境一致性 网校云的统一调度硬件资源使我们能有效盘活有效固定资产池 通过打通网关、日志体系,每位研发老师完全自助的完成所有配置。
应用快速发布
云原生的PIPELINE引擎
Tag事件 Push事件 Merge事件
弹性扩容
自动化日志收集
filebeat以daemon set模式运行,保证了每个节点都会有一个filebeat容器运行。 filbeat容器可以采集宿主机以及该宿主机上其他容器的日志。 可以在我们的容器平台,选择需要收集日志的应用,即可完成日志采集。 通过configMap(配置中心)的方式,对采集配置进行管理
域名收敛
一、为什么要做域名收敛
研发人员:
上线困难: 域名申请、域名备案、域名解析、网关创建应用、vhost、upstream、申请后端机器、后端nginx+fpm配置、发布代码。周期长(1周~1月),流程冗长,效率极低,研发人员将大量精力耗费在项目上线上。 开发困难:无论是app、H5、web等客户端,开发需要适配不同域名的不同接口,代码臃肿,难以维护,单app端依赖的接口就有涵盖了近百域名,开发人员已经不堪重负。
运维人员:
管理维护:上千的域名维护管理困难,只增不减,很多域名没有访问量,无人维护,无人认领。 配置困难:运维对接各种开发配置需求,造成网关层配置毫无规范,复杂冗长,频繁修改,出错率高,风险性大。 安全问题:暴露域名过多降低了系统的安全性,大量域名需要备案审计、安全扫描,也暴露出了很多安全漏洞。
二、如何实现域名收敛
2.1 域名规划
按照服务类型分类:WEB服务与API服务,前者输出的是html,后者输出的是json数据。 按照服务范围分类: 对内服务与对外服务,前者只提供内网或者办公区服务,后者提供公网服务。
app.xueersi.com : 主要代理对外WEB应用,面向公网用户,例如站点首页。 app.xesv5.com :主要代理对内WEB应用,面向内部用户,例如admin管理后台,各种监控平台,告警平台等对内系统。 api.xueersi.com : 主要代理对外API服务,例如app,ios,pc端调用的api服务,阿里云、微信等第三方回调api。 api.xesv5.com : 主要代理内部api服务,例如用户数据等中台类api接口。
2.2 方案制定
2.2.1 服务标签化
改写upstream:从proxy_pass http://app.xueersi.com 改写成 proxy_pass http://study.xueersi.com 改写host :从 app.xueersi.com 改写成 study.xueersi.com 改写uri : 从 /study/course/getInfo?a=1 改写成 /course/getInfo?a=1
2.2.2 上线流程简化
域名备案 :从立项到上线之间任意时间备份即可(安全部门硬性要求,公网域名必须备案,私网域名可以不用)。 创建upstream: 通过网关后台创建即可。
2.3 技术实现
三、问题与解决
3.1 path池
3.2 日志切割
app.xueersi.com_access.log 这份文件中,势必会造成单份日志文件过大的问题,同时会对ELK的搜索造成困扰,用户很难找到自己服务对应的日志。
3.3 cookie爆炸
3.4 跨域
3.5 双活
作者简介 陈朝飞为好未来PHP/Golang开发高级专家 招聘信息
好未来技术团队正在热招前端、算法、后台开发等各个方向高级开发工程师岗位,大家可点击本公众号“技术招聘”栏目了解详情,欢迎感兴趣的伙伴加入我们!也许你还想看重磅丨科技教育公司“好未来”正式对外开源高性能PHP框架Fend 好未来AI团队斩获UbiComp 2020国际竞赛冠军 探索下一代字符识别技术 "考试"背后的科学:教育测量中的理论与模型(IRT篇)